package com.weixing.mall.provider.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.weixing.mall.provider.model.domain.Order;
import com.weixing.mall.provider.model.vo.report.customer.CustomerReportDetailVo;
import com.weixing.mall.provider.model.vo.report.customer.CustomerSeckillBonusDetailVo;
import com.weixing.mall.provider.model.vo.report.customer.CustomerSeckillBonusOneVo;
import com.weixing.mall.provider.model.vo.report.customer.CustomerSeckillBonusTwoVo;
import com.weixing.mall.provider.model.vo.report.market.*;

import java.util.List;
import java.util.Map;

/**
 * @author jzy
 * @date 2020/5/30
 */
public interface IDayReportMarketService extends IService<Order> {
    /**
     * 1市场部报表--销售情况报表
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param orderType 订单类型
     * @param year 年份
     * @param sortField 排序字段
     * @param sortType  排序类型 asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<MarketSalesStatusVo> marketSalesStatus(Integer roleType, Long agentId, String startTime, String endTime, Integer orderType, Integer year, String sortField, String sortType, Page initMpPage);


    /**
     *市场部报表--销售情况报表-详情
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role  角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile  手机号
     * @param orderType  订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量  6瑕疵总量  7问题总量
     * @param actId  活动Id
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序，desc倒序
     * @param  date 具体日期
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerReportDetailVo>  marketSalesStatusDetail(Integer isOwn,Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId, String sortField, String sortType,String date, Page initMpPage);
    /**
     *市场部报表--销售情况报表-统计销售总额和实际销售总额
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param agentPid 代理商父Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role 角色 角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile 手机号
     * @param orderType 订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量 6瑕疵总量  7问题总量
     * @param actId 活动Id
     * @param  date 具体日期
     * @return
     */
    Map<String,Object> marketSalesStatusTotal(Integer isOwn,Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId,String date);


    /**
     *2市场部报表--代理数据分析报表
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param year 年份
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<MarketAgentDataAnalysisVo> marketAgentData(Integer roleType, Long agentId, String startTime, String endTime, Integer year, String sortField, String sortType, Page initMpPage);

    /**
     * 3市场部报表--区域销售报表
     * @param province 省份
     * @param city 城市
     * @param region 区
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    List<MarketAreaSalesVo>  areaReport(String province,String city, String region, String startTime, String endTime);

    /**
     * 3市场部报表--区域销售报表2
     * @param queryType 查询方式 1按照省排序，2按照市排序
     * @param province 省份
     * @param city 城市
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    List<MarketAreaSalesVo>  areaReport2(Integer queryType, String province, String city, String startTime, String endTime);

    /**
     * 4市场部报表--正价跟代理活动汇总表-返还款汇总
     * @param level  等级
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param userName 客服/代理名称
     * @param orderType 订单类型
     * @param actName 活动名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField  排序字段
     * @param sortType 排序类型 asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<MarketRegularActBonusVo> regularActBonus(Integer level, Integer roleType, Long agentId, String userName, Integer orderType,String actName, String startTime, String endTime, String sortField, String sortType, Page initMpPage);

    /**
     * 4市场部报表---正价跟代理活动汇总表--分红订单详情
     * @param type 类型  1一级分红（2%）  2二级分红（1%）
     * @param orderType 订单类型
     * @param actName 活动名称
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc 正序  desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillBonusDetailVo> regularActBonusDetail(Integer type,Integer orderType,String actName,Integer roleType, Long agentId, String startTime, String endTime, String sortField, String sortType, Page initMpPage);
    /**
     * 4市场部报表---正价跟代理活动汇总表--查看2%分红（一级分红）
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param userName  下单代理商名称
     * @param orderType  订单类型
     * @param actName  活动名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序 asc 正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillBonusOneVo> regularActBonusOne(Integer roleType,Long agentId, String userName,Integer orderType,String actName, String startTime, String endTime, String sortField, String sortType, Page initMpPage);

    /**
     * 4市场部报表---正价跟代理活动汇总表--查看1%分红（二级分红）
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param userName1 一级分红人名称
     * @param userName 下单代理商名称
     * @param orderType 订单类型
     * @param actName 活动名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序 asc 正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillBonusTwoVo> regularActBonusTwo(Integer roleType,Long agentId, String userName1, String userName,Integer orderType,String actName, String startTime, String endTime, String sortField, String sortType, Page initMpPage);

    /**
     *4市场部报表---正价跟代理活动汇总表
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param orderType 订单类型 1正价订单  2代理商活动订单 3秒杀活动订单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序 asc 正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<MarketRegularAgentVo> regularAndActivity(Integer roleType, Long agentId,Long agentPid, Integer pRole, Integer orderType, String startTime, String endTime,String actName, String sortField, String sortType, Page initMpPage);

    /**
     * 4市场部报表---推荐人报表-收益人
     * @param  agentId 代理商Id
     * @param distributorId  经销商Id
     * @param promoteStatus 晋升状态  1晋升前 2晋升后
     * @param orderType 订单类型 1正价订单  2代理商活动订单  3秒杀活动订单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<MarketReferrerVo>  referrerReport(Integer roleType, Long agentId,Long distributorId, Integer promoteStatus,String promoteTime, Integer orderType,Long actId, String startTime, String endTime, String sortField, String sortType, Page initMpPage);

    /**
     * 4市场部报表---推荐人报表--获取经销商下的所有合伙人-受益方
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param type 分红关系 空是所有 1 一级分红关系  2 二级分红关系
     * @return
     */
    List<ReferrerAgentVo> referrerReportAgents(Integer roleType,Long agentId,Integer type);
    /**
     * 4市场部报表---推荐人报表--获取经销商下的所有合伙人-发放方
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param type 分红关系 空是所有 1 一级发放人 2 二级发放人
     * @param bonusId 分红人Id
     * @return
     */
    List<ReferrerAgentVo> referrerReportAgentsSend(Integer roleType,Long agentId,Integer type,Long bonusId);
    /**
     * 4市场部报表---推荐人报表--获取分红人-发放方
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param type 分红关系 空是所有 1 一级发放人 2 二级发放人
     * @param partnerId 业绩人Id
     * @return
     */
    List<ReferrerAgentVo> referrerReportBonusAgent(Integer roleType,Long agentId,Integer type,Long partnerId);


    /**
     *5市场部报表--推荐人报表-详情-收益方
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentType  类型  1 受益人  2发放人
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role  角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile  手机号
     * @param orderType  订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量  6瑕疵总量  7问题总量
     * @param actId  活动Id
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序，desc倒序
     * @param distributorId  经销商Id
     * @param promoteStatus 晋升状态  1晋升前 2晋升后
     * @param promoteTime 晋升时间
     * @param issuerId 发放人Id
     * @param issuerRole 发放人角色  1客服 2代理商
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerReportDetailVo>  referrerReportDetail(Integer isOwn, Integer roleType, Long agentId,Integer agentType, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId, String sortField, String sortType,Long distributorId,Long issuerId,Integer  issuerRole, Integer promoteStatus, String promoteTime,Page initMpPage);
    /**
     *5市场部报表--推荐人报表-详情-发放
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentType  类型  1 受益人  2发放人
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role  角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile  手机号
     * @param orderType  订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量  6瑕疵总量  7问题总量
     * @param actId  活动Id
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序，desc倒序
     * @param distributorId  经销商Id
     * @param promoteStatus 晋升状态  1晋升前 2晋升后
     * @param promoteTime 晋升时间
     * @param bonusId 分红人Id
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerReportDetailVo>  referrerReportSendDetail(Integer isOwn, Integer roleType, Long agentId,Integer agentType, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId, String sortField, String sortType,Long distributorId, Integer promoteStatus, String promoteTime,Long bonusId, Page initMpPage);


    /**
     * 5市场部报表--推荐人报表详情-销售总额和实际销售总额-受益人
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param agentType 类型 1 受益人 2 发放人
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role 角色 角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile 手机号
     * @param orderType 订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量 6瑕疵总量  7问题总量
     * @param actId 活动Id
     * @param distributorId  合伙人Id
     * @param promoteStatus 晋升状态  1晋升前 2晋升后
     * @param promoteTime 晋升时间
     * @return
     */
    Map<String,Object> referrerReportDetailTotal(Integer isOwn, Integer roleType, Long agentId,Integer agentType, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId,Long distributorId,Long issuerId,Integer  issuerRole, Integer promoteStatus, String promoteTime);
    /**
     * 5市场部报表--推荐人报表详情-销售总额和实际销售总额-发放人
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param agentType 类型 1 受益人 2 发放人
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role 角色 角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile 手机号
     * @param orderType 订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量 6瑕疵总量  7问题总量
     * @param actId 活动Id
     * @param distributorId  经销商Id
     * @param promoteStatus 晋升状态  1晋升前 2晋升后
     * @param promoteTime 晋升时间
     * @param bonusId 分红人Id
     * @return
     */
    Map<String,Object> referrerReportSendDetailTotal(Integer isOwn, Integer roleType, Long agentId,Integer agentType, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId,Long distributorId, Integer promoteStatus, String promoteTime,Long bonusId);


    /**
     * 4市场部报表---推荐人报表-发放人
     * @param  agentId 代理商Id
     * @param distributorId  经销商Id
     * @param bonusId  分红人Id
     * @param promoteStatus 晋升状态  1晋升前 2晋升后
     * @param orderType 订单类型 1正价订单  2代理商活动订单  3秒杀活动订单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<MarketReferrerSendVo>  referrerReportSend(Integer roleType, Long agentId,Long distributorId,Long bonusId,  Integer promoteStatus,String promoteTime, Integer orderType,Long actId, String startTime, String endTime, String sortField, String sortType, Page initMpPage);


}
